// pages/main/main.js
const app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    activeCategoryId: 1, //激活的类别id
    books: [], // 展示的图书列表
    categories: [], // 分类导航数据
    pageNum: 1, // 当前页
    pageSize: 8, // 显示数据个数
    pages: 1, // 所有页
    hasNextPage: true, //判断是否还有下一页
    searchInput: null, // 查询的内容
    isSearchName: false, // 判断是否是查询
    floorstatus: false
  },

  //回到顶部
  goTop: function (e) {  // 一键回到顶部
    if (wx.pageScrollTo) {
      wx.pageScrollTo({
        scrollTop: 0
      })
    } else {
      wx.showModal({
        title: '提示',
        content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
      })
    }
  },

  // 获取滚动条当前位置
  onPageScroll: function (e) {
    if (e.scrollTop > 100) {
      this.setData({
        floorstatus: true
      });
    } else {
      this.setData({
        floorstatus: false
      });
    }
  },


  //加载首页数据
  loadMainData:function(){
    const pageNum = this.data.pageNum;  
    const pageSize = this.data.pageSize;
    const activeCategoryId = this.data.activeCategoryId;
    //获取所有的分类
    this.getAllCategorie();
    //获取当前分类的书籍
    this.getAllCategorieForbookList(pageNum, pageSize, activeCategoryId);
  },

  // 获取全部类别 
  getAllCategorie() {
    wx.request({
      url: app.serverUrl + "/category",
      method: "GET",
      header: {
        'content-type': 'application/json', // 默认值
      },
      fail: res => {
        wx.hideLoading({
          title: '与网络断开连接'
        })
      },
      success: e => {
        // e.data.data 分类对象数据
        this.setData({
          categories: e.data.data
        });
      }
    })
  },

  // 获取同个类别的书籍 
  getAllCategorieForbookList(pageNum, pageSize, categoryId) {
    wx.request({
      url: app.serverUrl + "/book/category",
      method: "GET",
      header: {
        'content-type': 'application/json', // 默认值
      },
      data: {
        pageNum,
        pageSize,
        categoryId
      },
      fail: res => {
        // 隐藏导航栏加载动画
        wx.hideNavigationBarLoading();
        // 停止下拉刷新的动画
        wx.stopPullDownRefresh();
        wx.hideLoading({
          title: '与网络断开连接'
        });
      },
      success: e => {
        // 隐藏导航栏加载动画
        wx.hideNavigationBarLoading();
        // 停止下拉刷新的动画
        wx.stopPullDownRefresh();
        // 判断是不是上拉刷新，是的话就将列表数据清空 也是说判断当前是否是第一页，第一页就刷新
        if (pageNum === 1) {
          this.setData({
            books: []
          });
        }
        /*分页数据对象
          records:书籍列表
          current:当前页码
          size:每页size条数据
          pages:总页数
          total:总条数
        */
        const { records, current, size, pages, total } = e.data.data;
     
        const hasNextPage = current < pages;  //是否还有下一页
        
        // 将查询出来的拼接上去
        const books = this.data.books.concat(records);
        this.setData({
          books:books,
          pageNum: current,
          pages: pages,
          hasNextPage: hasNextPage,
          isSearchName: false
        })
      }
    })
  },

  /**点击分类获取分类物品 */
  tabClick(e) {
    // 初始化pageNum 和 activeCategoryId
    const pageNum = 1;
    const activeCategoryId = e.currentTarget.dataset.id;
    const pageSize = this.data.pageSize;
    this.setData({
      activeCategoryId
    })
    this.getAllCategorieForbookList(pageNum, pageSize, activeCategoryId);
  },

  /**跳转到详情页面 */
  toDetailsTap(e) {
    // 获取当前自定义属性数据
    const index = e.currentTarget.dataset.index;  //商品下标
    let item = this.data.books[index];
    //这里需要将特殊符号进行转义，不然在转换 JSON格式的时候会报错
    // encodeURIComponent 转移字符串 主要是 书本描述
    //item = encodeURIComponent(JSON.stringify(item));
    //传递书籍的id
    const id = e.currentTarget.dataset.id;  //商品id
    wx.navigateTo({
      url: "/pages/goods/goods?id=" + id
    })
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    //console.log("上拉刷新！！！");
    let currentPage = this.data.pageNum;
    const pageSize = this.data.pageSize;
    let pages = this.data.pages;
    let isSearchName = this.data.isSearchName;

    //判断当前页数和总页数是否相等，如果相等的就无需查询
    if (pages === currentPage) {
      return;
    }
    // 判断是否书名查询
    if (!isSearchName) {  //不是查询
      const activeCategoryId = this.data.activeCategoryId;
      currentPage++;
      this.getAllCategorieForbookList(currentPage, pageSize, activeCategoryId);
    } else {
      const searchInput = this.data.searchInput;
      currentPage++;
      this.search(currentPage, pageSize, searchInput);
    }
  },


    /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    //console.log("下拉刷新！！！");
    const pageSize = this.data.pageSize;
    const currentPage = 1;
    const isSearchName = this.data.isSearchName;
    // 当前页面显示导航条加载页面
    wx.showNavigationBarLoading()
    if (!isSearchName) {    //不是搜索
      const activeCategoryId = this.data.activeCategoryId;
      this.getAllCategorieForbookList(currentPage, pageSize, activeCategoryId);
    } else {
      const searchInput = this.data.searchInput;
      this.search(currentPage, pageSize, searchInput);
    }
  },

  // 监听查询输入的内容
  listenerSearchInput(e) {
    const searchInput = e.detail.value;
    this.setData({
      searchInput: searchInput
    })
  },

  // 跳转查询
  toSearch() {
    const searchInput = this.data.searchInput;
    if (!searchInput) {
      wx.showToast({
        title: '查询内容不能为空',
        icon: 'none'
      });
      return;
    }
    //每次查询清空数据
    this.setData({
      books: []
    });
    const pageNum = 1;
    const pageSize = this.data.pageSize;
    this.search(pageNum, pageSize, searchInput);
  },

  // 查询方法
  search(pageNum, pageSize, name) {
    wx.request({
      url: app.serverUrl + '/book/search',
      method: "GET",
      header: {
        'content-type': 'application/json', // 默认值
      },
      data: {
        pageNum,
        pageSize,
        name
      },
      success: e => {
        // 隐藏导航栏加载动画
        wx.hideNavigationBarLoading();
        // 停止下拉刷新的动画
        wx.stopPullDownRefresh();

        /*分页数据对象
          records:书籍列表
          current:当前页码
          size:每页size条数据
          pages:总页数
          total:总条数
        */
        const { records, current, size, pages, total } = e.data.data;
        const hasNextPage = current < pages;  //是否还有下一页
        // 判断查询时是否是第一页，第一页就清空之前数据
        if (pageNum === 1) {
          this.setData({
            books: []
          })
        }

        // 将查询出来的拼接上去
        const books = this.data.books.concat(records);
        this.setData({
          books: books,
          pageNum: current,
          pages: pages,
          hasNextPage: hasNextPage,
          isSearchName: true
        });
      }
    })
  },
  

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.loadMainData();  //加载首页数据
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})